// 原生Promise  catch 
// const promise = new Promise(function(resolve, reject) {
//     reject('失败啦')
// })
// promise
// .then(value => {
//     console.log(value,'vallll');
// }).catch(err => {
//     console.log(err,'aaaaa');
// })


// 自己实现这个catch 效果 
// 是类直接调用所以是静态方法
const MyPromise = require('./myPromise');
const myPromise = new MyPromise(function(resolve,reject) {
    reject('是失败哦')
})
myPromise
.then(value => {
    console.log(value,'vallll');
}).catch(err => {
    console.log(err,'aaaaa'); // 是失败哦
})

// ********************************finally*****************************************

// 原生Promise finally
// const promise = new Promise(function(resolve, reject) {
//     resolve('成功啦')
//     // reject('失败啦')
// })
// const p1 = new Promise(function(resolve, reject) {
//     setTimeout(() => {
//         resolve('迟到成功啦')
//     }, 2000);
// })
// promise.finally(value => {
//     console.log('不管失败还是成功我都执行的呀');
//     // 在finally return返回的值并不会传递给下一个then方法的回调中去
//     return p1
// }).then(value => {
//     console.log(value,'vallll');
//     // 在then return返回的值会传递给下一个then方法的回调中去
//     return 'niii'
// },err => {
//     console.log(err,'errr');
// }).then(value => {
//     console.log(value,'aaaaa');
// },err => {
//     console.log(err,'errr');
// })


// 自己实现这个finally效果
// 是类直接调用所以是静态方法
// const MyPromise = require('./myPromise');
// const myPromise = new MyPromise(function(resolve,reject) {
//     resolve('是成功哦')
//     // reject('是失败哦')
// })
// // 如果在finally中返回一个异步的promise，则需要等待这个异步执行完再返回并且需要把这个传递给下个then的对应回调中
// const p1 = new MyPromise(function(resolve,reject) {
//     setTimeout(() => {
//         resolve('迟到的成功哦')
//     }, 2000);
// })
// myPromise.finally(val => {
//     console.log('不管失败还是成功我都执行的呀....');
    
//     // 在finally return返回的值并不会传递给下一个then方法的回调中去
//     return p1
// }).then(data => {
//     console.log(data); // 等待2秒后打印  是成功哦
//     // 在then return返回的值会传递给下一个then方法的回调中去
//     // return 'niii'
// }, err => {
//     console.log(err);
// })


//******************************resolve*************************************************
/**
 * Promise.resolve把传过去的值变成promise对象并返回
 * Promise.resolve方法接收一个参数，如果这个参数不是promise对象的话就会包装promise对象返回，如果参数是promise对象的话直接返回，
 */
// // 原生Promise
// Promise.resolve(1000).then(value => console.log(value))


// // 自己实现这个效果
// // 是类直接调用所以是静态方法
// const MyPromise = require('./myPromise')
// MyPromise.resolve(2000).then(value => console.log(value))


// *************************all************************************************

// // 自己实现这么效果all
// const MyPromise = require('./myPromise')
// const p1 = new MyPromise(function(reslove,reject) {
//     setTimeout(() => {
//         reslove('成功了')
//     }, 2000);
// })
// const p2 = new MyPromise(function(reslove,reject) {
//     reslove('成功了哦哦哦哦哦哦')
// })
// MyPromise.all(['1','5',p1,'8',p2])
// .then(value => {
//     // 打印结果是[ '1', '5', <1 empty item>, '8', '成功了哦哦哦哦哦哦' ]
//     // <1 empty item>原本应该是p1和p2的返回值，但是却返回的是空的
//     // 原因就是myPromise.js中的静态方法all中有说明
//     console.log(value); // 正确结果是[ '1', '5', '成功了', '8', '成功了哦哦哦哦哦哦' ]
// },err => {
//     console.log(err);
// })